class OscSoftDetailEntity {
	int code;
	OscSoftDetailData data;
	String message;

	OscSoftDetailEntity({this.code, this.data, this.message});

	OscSoftDetailEntity.fromJson(Map<String, dynamic> json) {
		code = json['code'];
		data = json['data'] != null ? new OscSoftDetailData.fromJson(json['data']) : null;
		message = json['message'];
	}

	Map<String, dynamic> toJson() {
		final Map<String, dynamic> data = new Map<String, dynamic>();
		data['code'] = this.code;
		if (this.data != null) {
      data['data'] = this.data.toJson();
    }
		data['message'] = this.message;
		return data;
	}
}

class OscSoftDetailData {
	List<OscSoftDetailDataRelatedproject> relatedProjects;
	List<OscSoftDetailDataRelatedblog> relatedBlog;
	List<OscSoftDetailDataCommants> comments;
	OscSoftDetailDataAuthor author;
	OscSoftDetailDataProject project;
	List<OscSoftDetailDataRelatednews> relatedNews;
	List<OscSoftDetailDataRelatedquestion> relatedQuestion;

	OscSoftDetailData({this.relatedProjects, this.relatedBlog, this.comments, this.author, this.project, this.relatedNews, this.relatedQuestion});

	OscSoftDetailData.fromJson(Map<String, dynamic> json) {
		if (json['relatedProjects'] != null) {
			relatedProjects = new List<OscSoftDetailDataRelatedproject>();(json['relatedProjects'] as List).forEach((v) { relatedProjects.add(new OscSoftDetailDataRelatedproject.fromJson(v)); });
		}
		if (json['relatedBlog'] != null) {
			relatedBlog = new List<OscSoftDetailDataRelatedblog>();(json['relatedBlog'] as List).forEach((v) { relatedBlog.add(new OscSoftDetailDataRelatedblog.fromJson(v)); });
		}
		if (json['comments'] != null) {
			comments = new List<OscSoftDetailDataCommants>();(json['comments'] as List).forEach((v) { comments.add(new OscSoftDetailDataCommants.fromJson(v)); });
		}
		author = json['author'] != null ? new OscSoftDetailDataAuthor.fromJson(json['author']) : null;
		project = json['project'] != null ? new OscSoftDetailDataProject.fromJson(json['project']) : null;
		if (json['relatedNews'] != null) {
			relatedNews = new List<OscSoftDetailDataRelatednews>();(json['relatedNews'] as List).forEach((v) { relatedNews.add(new OscSoftDetailDataRelatednews.fromJson(v)); });
		}
		if (json['relatedQuestion'] != null) {
			relatedQuestion = new List<OscSoftDetailDataRelatedquestion>();(json['relatedQuestion'] as List).forEach((v) { relatedQuestion.add(new OscSoftDetailDataRelatedquestion.fromJson(v)); });
		}
	}

	Map<String, dynamic> toJson() {
		final Map<String, dynamic> data = new Map<String, dynamic>();
		if (this.relatedProjects != null) {
      data['relatedProjects'] =  this.relatedProjects.map((v) => v.toJson()).toList();
    }
		if (this.relatedBlog != null) {
      data['relatedBlog'] =  this.relatedBlog.map((v) => v.toJson()).toList();
    }
		if (this.comments != null) {
      data['comments'] =  this.comments.map((v) => v.toJson()).toList();
    }
		if (this.author != null) {
      data['author'] = this.author.toJson();
    }
		if (this.project != null) {
      data['project'] = this.project.toJson();
    }
		if (this.relatedNews != null) {
      data['relatedNews'] =  this.relatedNews.map((v) => v.toJson()).toList();
    }
		if (this.relatedQuestion != null) {
      data['relatedQuestion'] =  this.relatedQuestion.map((v) => v.toJson()).toList();
    }
		return data;
	}
}

class OscSoftDetailDataRelatedproject {
	int replyCount;
	String ident;
	String name;
	String logo;
	bool recommend;
	bool cn;
	int id;
	String title;
	int collectNumber;
	String desc;

	OscSoftDetailDataRelatedproject({this.replyCount, this.ident, this.name, this.logo, this.recommend, this.cn, this.id, this.title, this.collectNumber, this.desc});

	OscSoftDetailDataRelatedproject.fromJson(Map<String, dynamic> json) {
		replyCount = json['replyCount'];
		ident = json['ident'];
		name = json['name'];
		logo = json['logo'];
		recommend = json['recommend'];
		cn = json['cn'];
		id = json['id'];
		title = json['title'];
		collectNumber = json['collectNumber'];
		desc = json['desc'];
	}

	Map<String, dynamic> toJson() {
		final Map<String, dynamic> data = new Map<String, dynamic>();
		data['replyCount'] = this.replyCount;
		data['ident'] = this.ident;
		data['name'] = this.name;
		data['logo'] = this.logo;
		data['recommend'] = this.recommend;
		data['cn'] = this.cn;
		data['id'] = this.id;
		data['title'] = this.title;
		data['collectNumber'] = this.collectNumber;
		data['desc'] = this.desc;
		return data;
	}
}

class OscSoftDetailDataRelatedblog {
	int replyCount;
	OscSoftDetailDataRelatedblogAuthor author;
	int id;
	String title;
	int type;
	String pubDate;
	String url;
	String desc;

	OscSoftDetailDataRelatedblog({this.replyCount, this.author, this.id, this.title, this.type, this.pubDate, this.url, this.desc});

	OscSoftDetailDataRelatedblog.fromJson(Map<String, dynamic> json) {
		replyCount = json['replyCount'];
		author = json['author'] != null ? new OscSoftDetailDataRelatedblogAuthor.fromJson(json['author']) : null;
		id = json['id'];
		title = json['title'];
		type = json['type'];
		pubDate = json['pubDate'];
		url = json['url'];
		desc = json['desc'];
	}

	Map<String, dynamic> toJson() {
		final Map<String, dynamic> data = new Map<String, dynamic>();
		data['replyCount'] = this.replyCount;
		if (this.author != null) {
      data['author'] = this.author.toJson();
    }
		data['id'] = this.id;
		data['title'] = this.title;
		data['type'] = this.type;
		data['pubDate'] = this.pubDate;
		data['url'] = this.url;
		data['desc'] = this.desc;
		return data;
	}
}

class OscSoftDetailDataRelatedblogAuthor {
	OscSoftDetailDataRelatedblogAuthorIdentity identity;
	String name;
	int id;
	String portrait;

	OscSoftDetailDataRelatedblogAuthor({this.identity, this.name, this.id, this.portrait});

	OscSoftDetailDataRelatedblogAuthor.fromJson(Map<String, dynamic> json) {
		identity = json['identity'] != null ? new OscSoftDetailDataRelatedblogAuthorIdentity.fromJson(json['identity']) : null;
		name = json['name'];
		id = json['id'];
		portrait = json['portrait'];
	}

	Map<String, dynamic> toJson() {
		final Map<String, dynamic> data = new Map<String, dynamic>();
		if (this.identity != null) {
      data['identity'] = this.identity.toJson();
    }
		data['name'] = this.name;
		data['id'] = this.id;
		data['portrait'] = this.portrait;
		return data;
	}
}

class OscSoftDetailDataRelatedblogAuthorIdentity {
	bool officialMember;
	bool softwareAuthor;

	OscSoftDetailDataRelatedblogAuthorIdentity({this.officialMember, this.softwareAuthor});

	OscSoftDetailDataRelatedblogAuthorIdentity.fromJson(Map<String, dynamic> json) {
		officialMember = json['officialMember'];
		softwareAuthor = json['softwareAuthor'];
	}

	Map<String, dynamic> toJson() {
		final Map<String, dynamic> data = new Map<String, dynamic>();
		data['officialMember'] = this.officialMember;
		data['softwareAuthor'] = this.softwareAuthor;
		return data;
	}
}

class OscSoftDetailDataCommants {
	int id;
	String pubDate;
	OscSoftDetailDataCommentsUser user;
	String content;

	OscSoftDetailDataCommants({this.id, this.pubDate, this.user, this.content});

	OscSoftDetailDataCommants.fromJson(Map<String, dynamic> json) {
		id = json['id'];
		pubDate = json['pubDate'];
		user = json['user'] != null ? new OscSoftDetailDataCommentsUser.fromJson(json['user']) : null;
		content = json['content'];
	}

	Map<String, dynamic> toJson() {
		final Map<String, dynamic> data = new Map<String, dynamic>();
		data['id'] = this.id;
		data['pubDate'] = this.pubDate;
		if (this.user != null) {
      data['user'] = this.user.toJson();
    }
		data['content'] = this.content;
		return data;
	}
}

class OscSoftDetailDataCommentsUser {
	OscSoftDetailDataCommentsUserIdentity identity;
	String name;
	int id;

	OscSoftDetailDataCommentsUser({this.identity, this.name, this.id});

	OscSoftDetailDataCommentsUser.fromJson(Map<String, dynamic> json) {
		identity = json['identity'] != null ? new OscSoftDetailDataCommentsUserIdentity.fromJson(json['identity']) : null;
		name = json['name'];
		id = json['id'];
	}

	Map<String, dynamic> toJson() {
		final Map<String, dynamic> data = new Map<String, dynamic>();
		if (this.identity != null) {
      data['identity'] = this.identity.toJson();
    }
		data['name'] = this.name;
		data['id'] = this.id;
		return data;
	}
}

class OscSoftDetailDataCommentsUserIdentity {
	bool officialMember;
	bool softwareAuthor;

	OscSoftDetailDataCommentsUserIdentity({this.officialMember, this.softwareAuthor});

	OscSoftDetailDataCommentsUserIdentity.fromJson(Map<String, dynamic> json) {
		officialMember = json['officialMember'];
		softwareAuthor = json['softwareAuthor'];
	}

	Map<String, dynamic> toJson() {
		final Map<String, dynamic> data = new Map<String, dynamic>();
		data['officialMember'] = this.officialMember;
		data['softwareAuthor'] = this.softwareAuthor;
		return data;
	}
}

class OscSoftDetailDataAuthor {
	int projectCount;
	int followers;
	int followStatus;
	String name;
	String project;
	String portrait;
	int userID;

	OscSoftDetailDataAuthor({this.projectCount, this.followers, this.followStatus, this.name, this.project, this.portrait, this.userID});

	OscSoftDetailDataAuthor.fromJson(Map<String, dynamic> json) {
		projectCount = json['projectCount'];
		followers = json['followers'];
		followStatus = json['followStatus'];
		name = json['name'];
		project = json['project'];
		portrait = json['portrait'];
		userID = json['userID'];
	}

	Map<String, dynamic> toJson() {
		final Map<String, dynamic> data = new Map<String, dynamic>();
		data['projectCount'] = this.projectCount;
		data['followers'] = this.followers;
		data['followStatus'] = this.followStatus;
		data['name'] = this.name;
		data['project'] = this.project;
		data['portrait'] = this.portrait;
		data['userID'] = this.userID;
		return data;
	}
}

class OscSoftDetailDataProject {
	OscSoftDetailDataProjectSummary summary;
	List<OscSoftDetailDataProjectLanguagetag> languageTags;
	String collectionTime;
	String documentUrl;
	String giteeWidget;
	String content;
	String platform;
	List<OscSoftDetailDataProjectTag> tags;
	String homeUrl;
	String license;
	String githubWidget;
	String officialDownloadUrl;
	OscSoftDetailDataProjectCompany company;
	String projectDownloadUrl;
	String quickDownloadUrl;
	OscSoftDetailDataProjectUser user;

	OscSoftDetailDataProject({this.summary, this.languageTags, this.collectionTime, this.documentUrl, this.giteeWidget, this.content, this.platform, this.tags, this.homeUrl, this.license, this.githubWidget, this.officialDownloadUrl, this.company, this.projectDownloadUrl, this.quickDownloadUrl, this.user});

	OscSoftDetailDataProject.fromJson(Map<String, dynamic> json) {
		summary = json['summary'] != null ? new OscSoftDetailDataProjectSummary.fromJson(json['summary']) : null;
		if (json['languageTags'] != null) {
			languageTags = new List<OscSoftDetailDataProjectLanguagetag>();(json['languageTags'] as List).forEach((v) { languageTags.add(new OscSoftDetailDataProjectLanguagetag.fromJson(v)); });
		}
		collectionTime = json['collectionTime'];
		documentUrl = json['documentUrl'];
		giteeWidget = json['giteeWidget'];
		content = json['content'];
		platform = json['platform'];
		if (json['tags'] != null) {
			tags = new List<OscSoftDetailDataProjectTag>();(json['tags'] as List).forEach((v) { tags.add(new OscSoftDetailDataProjectTag.fromJson(v)); });
		}
		homeUrl = json['homeUrl'];
		license = json['license'];
		githubWidget = json['githubWidget'];
		officialDownloadUrl = json['officialDownloadUrl'];
		company = json['company'] != null ? new OscSoftDetailDataProjectCompany.fromJson(json['company']) : null;
		projectDownloadUrl = json['projectDownloadUrl'];
		quickDownloadUrl = json['quickDownloadUrl'];
		user = json['user'] != null ? new OscSoftDetailDataProjectUser.fromJson(json['user']) : null;
	}

	Map<String, dynamic> toJson() {
		final Map<String, dynamic> data = new Map<String, dynamic>();
		if (this.summary != null) {
      data['summary'] = this.summary.toJson();
    }
		if (this.languageTags != null) {
      data['languageTags'] =  this.languageTags.map((v) => v.toJson()).toList();
    }
		data['collectionTime'] = this.collectionTime;
		data['documentUrl'] = this.documentUrl;
		data['giteeWidget'] = this.giteeWidget;
		data['content'] = this.content;
		data['platform'] = this.platform;
		if (this.tags != null) {
      data['tags'] =  this.tags.map((v) => v.toJson()).toList();
    }
		data['homeUrl'] = this.homeUrl;
		data['license'] = this.license;
		data['githubWidget'] = this.githubWidget;
		data['officialDownloadUrl'] = this.officialDownloadUrl;
		if (this.company != null) {
      data['company'] = this.company.toJson();
    }
		data['projectDownloadUrl'] = this.projectDownloadUrl;
		data['quickDownloadUrl'] = this.quickDownloadUrl;
		if (this.user != null) {
      data['user'] = this.user.toJson();
    }
		return data;
	}
}

class OscSoftDetailDataProjectSummary {
	int replyCount;
	String ident;
	String name;
	String logo;
	bool recommend;
	bool cn;
	int id;
	String title;
	int collectNumber;
	String desc;

	OscSoftDetailDataProjectSummary({this.replyCount, this.ident, this.name, this.logo, this.recommend, this.cn, this.id, this.title, this.collectNumber, this.desc});

	OscSoftDetailDataProjectSummary.fromJson(Map<String, dynamic> json) {
		replyCount = json['replyCount'];
		ident = json['ident'];
		name = json['name'];
		logo = json['logo'];
		recommend = json['recommend'];
		cn = json['cn'];
		id = json['id'];
		title = json['title'];
		collectNumber = json['collectNumber'];
		desc = json['desc'];
	}

	Map<String, dynamic> toJson() {
		final Map<String, dynamic> data = new Map<String, dynamic>();
		data['replyCount'] = this.replyCount;
		data['ident'] = this.ident;
		data['name'] = this.name;
		data['logo'] = this.logo;
		data['recommend'] = this.recommend;
		data['cn'] = this.cn;
		data['id'] = this.id;
		data['title'] = this.title;
		data['collectNumber'] = this.collectNumber;
		data['desc'] = this.desc;
		return data;
	}
}

class OscSoftDetailDataProjectLanguagetag {
	String ident;
	String name;
	int id;

	OscSoftDetailDataProjectLanguagetag({this.ident, this.name, this.id});

	OscSoftDetailDataProjectLanguagetag.fromJson(Map<String, dynamic> json) {
		ident = json['ident'];
		name = json['name'];
		id = json['id'];
	}

	Map<String, dynamic> toJson() {
		final Map<String, dynamic> data = new Map<String, dynamic>();
		data['ident'] = this.ident;
		data['name'] = this.name;
		data['id'] = this.id;
		return data;
	}
}

class OscSoftDetailDataProjectTag {
	String ident;
	String name;
	int id;

	OscSoftDetailDataProjectTag({this.ident, this.name, this.id});

	OscSoftDetailDataProjectTag.fromJson(Map<String, dynamic> json) {
		ident = json['ident'];
		name = json['name'];
		id = json['id'];
	}

	Map<String, dynamic> toJson() {
		final Map<String, dynamic> data = new Map<String, dynamic>();
		data['ident'] = this.ident;
		data['name'] = this.name;
		data['id'] = this.id;
		return data;
	}
}

class OscSoftDetailDataProjectCompany {
	int projectCount;
	String ident;
	String name;
	String logo;
	int id;

	OscSoftDetailDataProjectCompany({this.projectCount, this.ident, this.name, this.logo, this.id});

	OscSoftDetailDataProjectCompany.fromJson(Map<String, dynamic> json) {
		projectCount = json['projectCount'];
		ident = json['ident'];
		name = json['name'];
		logo = json['logo'];
		id = json['id'];
	}

	Map<String, dynamic> toJson() {
		final Map<String, dynamic> data = new Map<String, dynamic>();
		data['projectCount'] = this.projectCount;
		data['ident'] = this.ident;
		data['name'] = this.name;
		data['logo'] = this.logo;
		data['id'] = this.id;
		return data;
	}
}

class OscSoftDetailDataProjectUser {
	String name;
	int id;
	String portrait;

	OscSoftDetailDataProjectUser({this.name, this.id, this.portrait});

	OscSoftDetailDataProjectUser.fromJson(Map<String, dynamic> json) {
		name = json['name'];
		id = json['id'];
		portrait = json['portrait'];
	}

	Map<String, dynamic> toJson() {
		final Map<String, dynamic> data = new Map<String, dynamic>();
		data['name'] = this.name;
		data['id'] = this.id;
		data['portrait'] = this.portrait;
		return data;
	}
}

class OscSoftDetailDataRelatednews {
	int replyCount;
	int id;
	String title;
	int type;
	String pubDate;
	String url;
	String desc;

	OscSoftDetailDataRelatednews({this.replyCount, this.id, this.title, this.type, this.pubDate, this.url, this.desc});

	OscSoftDetailDataRelatednews.fromJson(Map<String, dynamic> json) {
		replyCount = json['replyCount'];
		id = json['id'];
		title = json['title'];
		type = json['type'];
		pubDate = json['pubDate'];
		url = json['url'];
		desc = json['desc'];
	}

	Map<String, dynamic> toJson() {
		final Map<String, dynamic> data = new Map<String, dynamic>();
		data['replyCount'] = this.replyCount;
		data['id'] = this.id;
		data['title'] = this.title;
		data['type'] = this.type;
		data['pubDate'] = this.pubDate;
		data['url'] = this.url;
		data['desc'] = this.desc;
		return data;
	}
}

class OscSoftDetailDataRelatedquestion {
	int replyCount;
	OscSoftDetailDataRelatedquestionAuthor author;
	int id;
	String title;
	int type;
	String pubDate;
	String url;
	String desc;

	OscSoftDetailDataRelatedquestion({this.replyCount, this.author, this.id, this.title, this.type, this.pubDate, this.url, this.desc});

	OscSoftDetailDataRelatedquestion.fromJson(Map<String, dynamic> json) {
		replyCount = json['replyCount'];
		author = json['author'] != null ? new OscSoftDetailDataRelatedquestionAuthor.fromJson(json['author']) : null;
		id = json['id'];
		title = json['title'];
		type = json['type'];
		pubDate = json['pubDate'];
		url = json['url'];
		desc = json['desc'];
	}

	Map<String, dynamic> toJson() {
		final Map<String, dynamic> data = new Map<String, dynamic>();
		data['replyCount'] = this.replyCount;
		if (this.author != null) {
      data['author'] = this.author.toJson();
    }
		data['id'] = this.id;
		data['title'] = this.title;
		data['type'] = this.type;
		data['pubDate'] = this.pubDate;
		data['url'] = this.url;
		data['desc'] = this.desc;
		return data;
	}
}

class OscSoftDetailDataRelatedquestionAuthor {
	OscSoftDetailDataRelatedquestionAuthorIdentity identity;
	String name;
	int id;
	String portrait;

	OscSoftDetailDataRelatedquestionAuthor({this.identity, this.name, this.id, this.portrait});

	OscSoftDetailDataRelatedquestionAuthor.fromJson(Map<String, dynamic> json) {
		identity = json['identity'] != null ? new OscSoftDetailDataRelatedquestionAuthorIdentity.fromJson(json['identity']) : null;
		name = json['name'];
		id = json['id'];
		portrait = json['portrait'];
	}

	Map<String, dynamic> toJson() {
		final Map<String, dynamic> data = new Map<String, dynamic>();
		if (this.identity != null) {
      data['identity'] = this.identity.toJson();
    }
		data['name'] = this.name;
		data['id'] = this.id;
		data['portrait'] = this.portrait;
		return data;
	}
}

class OscSoftDetailDataRelatedquestionAuthorIdentity {
	bool officialMember;
	bool softwareAuthor;

	OscSoftDetailDataRelatedquestionAuthorIdentity({this.officialMember, this.softwareAuthor});

	OscSoftDetailDataRelatedquestionAuthorIdentity.fromJson(Map<String, dynamic> json) {
		officialMember = json['officialMember'];
		softwareAuthor = json['softwareAuthor'];
	}

	Map<String, dynamic> toJson() {
		final Map<String, dynamic> data = new Map<String, dynamic>();
		data['officialMember'] = this.officialMember;
		data['softwareAuthor'] = this.softwareAuthor;
		return data;
	}
}
